package com.kuang.feture;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

/**
 * 异步回调
 *      Feture：未来，设计初中：对将来的某个事件进行建模
 *          异步执行
 *          成功回调
 *          失败回调
 *      理解：
 *          AJAX,客户端发异步请求到服务器
 *          Feture,多个线程同时执行时，异步执行线程请求，可以获取请求结果（or Void不获取请求结果）
 *      使用：
 *          没有返回值的 runAsync 异步回调，可以通过get()获取
 *          有返回值的 supplyAsync 异步回调，返回类型为泛型的类型
 */

//没有返回值的 runAsync 异步回调
public class Test1 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 发起一个异步请求
        CompletableFuture<Void> voidCompletableFuture = CompletableFuture.runAsync(() -> {
            try {
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + "runAsync=>Void");
        });

        // 主线程
        System.out.println("main：1111");

        // 获取阻塞执行结果：异步请求默认没有返回，可以通过get()来获取结果
        voidCompletableFuture.get();

        /*执行结果：
            main：1111
            ForkJoinPool.commonPool-worker-1runAsync=>Void
         */
    }
}
